# _*_ coding: UTF-8 _*_
import time
from flask import render_template, redirect, request, url_for, flash
from flask_login import login_user, logout_user, login_required
from . import auth
from ..models import User
from .forms import LoginForm

def debug(para_name,para_value):
	current_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
	print ("[Debug]"+' %s '+para_name+':'+'%s') % (current_time,para_value)

#当请求类型是GET 时，视图函数直接渲染模板，即显示表单。当表单在POST 请求中提交时，Flask-WTF 中的validate_on_submit() 函数会验证表单数据，然后尝试登入用户。
@auth.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit(): #POST
        login_ip = request.remote_addr
        login_username=form.username.data
        login_password=form.password.data
        debug('Login User',login_username)
        debug('Login IP', login_ip)
        user = User.query.filter_by(username=form.username.data).first()
        if user is not None and user.verify_password(form.password.data):
            #login_user() 函数的参数是要登录的用户，以及可选的“记住我”布尔值，“记住我”也在表单中填写。如果值为False，那么关闭浏览器后用户会话就过期了，所以下次用户访问时要重新登录。如果值为True，那么会在用户浏览器中写入一个长期有效的cookie，使用这个cookie 可以复现用户会话。
            login_user(user, form.remember_me.data)
            #“Post/ 重定向/Get 模式”，提交登录密令的POST 请求最后也做了重定向，不过目标URL 有两种可能。用户访问未授权的URL 时会显示登录表单，Flask-Login会把原地址保存在查询字符串的next 参数中，这个参数可从request.args 字典中读取。如果查询字符串中没有next 参数，则重定向到首页。如果用户输入的用户名或密码不正确，程序会设定一个Flash 消息，再次渲染表单，让用户重试登录。
            next = request.args.get('next')
            if next is None or not next.startswith('/'):
               # next = url_for('main.index')
				return render_template('pro_test.html') #登陆成功后，返回协议测试页面:protocal_test.html
            return redirect(next)
        flash('Invalid username or password.')
    return render_template('auth/login.html', form=form)   #GET


@auth.route('/logout')
@login_required
def logout():
    logout_user()  #删除并重设用户会话
    flash('You have been logged out.')
    return redirect(url_for('main.index'))
